package com.cqs.leetcode.tree;

import com.cqs.leetcode.TreeNode;

/**
 * @author lixiaowen
 * @create 2019-12-10
 */
public class SumRoottoLeafNumbers129 {


    /**
     * 注意这里使用全局遍历 不要作为形参传递进去
     */
    private int sum = 0;

    public int sumNumbers(TreeNode root) {
        if(root == null) {
            return 0;
        }
        sumNum(root, 0);
        return sum;
    }

    /**
     *  preOrder
     *  递归求和
     *  注意不要讲sum作为形参传递(Integer类型也不行)，
     *  Java会传值 不会真正修改外部的sum
     * @param root 子树根
     * @param cur 当前结点的表示的数值
     */
    private void sumNum(TreeNode root, int cur) {
        //计算当前结点的数值
        cur = cur * 10 + root.val;
        //叶子结点
        if(root.left == null && root.right == null) {
            sum += cur;
        }
        if(root.left != null) {
            sumNum(root.left, cur);
        }
        if(root.right != null) {
            sumNum(root.right, cur);
        }
    }
}
